package com.gd.iot.energy.service.common.impl;

import cn.hutool.cache.CacheUtil;
import cn.hutool.cache.impl.TimedCache;
import com.gd.iot.energy.service.common.CaptchaCacheService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

/**
 * hutool工具的缓存实现 验证码缓存
 *
 * @author kris
 * @date Created at 2020/8/3 15:47
 */
@Service
public class HutoolCacheCaptchaCacheServiceImpl implements CaptchaCacheService {

    @Value("${energy.captcha.expireInMills:600000}")
    private Long expireInMills;

    public static final TimedCache<String, String> CAPTCHA_CACHE = CacheUtil.newTimedCache( 10 * 60000);

    static {
        CAPTCHA_CACHE.schedulePrune(1000);
    }

    @Override
    public boolean save(String token, String text) {
        CAPTCHA_CACHE.put(token,text,expireInMills);
        return true;
    }

    @Override
    public boolean delete(String token) {
        CAPTCHA_CACHE.remove(token);
        return true;
    }

    @Override
    public boolean update(String token, String text) {
        CAPTCHA_CACHE.put(token,text,expireInMills);
        return true;
    }

    /**
     * 如果用户在超时前调用了get(key)方法，会重头计算起始时间。举个例子，用户设置key1的超时时间5s，
     * 用户在4s的时候调用了get("key1")，此时超时时间重新计算，再过4s调用get("key1")方法值依旧存在。
     * 如果想避开这个机制，请调用get("key1", false)方法。
     * @param token
     * @return
     */
    @Override
    public String get(String token) {
        return CAPTCHA_CACHE.get(token);
    }
}
